<!DOCTYPE html>
<html lang="zh-CN">
<head>
	    <meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;IE=7" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                    <title>Python - code123</title>                        <meta name="keywords" content="Python" />
    <meta name="description" content="" />
    <meta name="viewport" content="initial-scale=1.0,user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <link rel="Shortcut Icon" href="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/08/favicon.ico" type="image/x-icon" />
    <link rel="alternate" type="application/rss+xml" title="code123 &raquo; Feed" href="http://www.code123.cc/feed" />
<link rel="alternate" type="application/rss+xml" title="code123 &raquo; 评论Feed" href="http://www.code123.cc/comments/feed" />
<link rel="alternate" type="application/rss+xml" title="code123 &raquo; Python分类目录Feed" href="http://www.code123.cc/category/python/feed" />
		<script type="text/javascript">
			window._wpemojiSettings = {"baseUrl":"http:\/\/s.w.org\/images\/core\/emoji\/72x72\/","ext":".png","source":{"concatemoji":"http:\/\/www.code123.cc\/wp-includes\/js\/wp-emoji-release.min.js?ver=1462685583"}};
			!function(a,b,c){function d(a){var c=b.createElement("canvas"),d=c.getContext&&c.getContext("2d");return d&&d.fillText?(d.textBaseline="top",d.font="600 32px Arial","flag"===a?(d.fillText(String.fromCharCode(55356,56812,55356,56807),0,0),c.toDataURL().length>3e3):(d.fillText(String.fromCharCode(55357,56835),0,0),0!==d.getImageData(16,16,1,1).data[0])):!1}function e(a){var c=b.createElement("script");c.src=a,c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g;c.supports={simple:d("simple"),flag:d("flag")},c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.simple&&c.supports.flag||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
		</script>
		<style type="text/css">
img.wp-smiley,
img.emoji {
	display: inline !important;
	border: none !important;
	box-shadow: none !important;
	height: 1em !important;
	width: 1em !important;
	margin: 0 .07em !important;
	vertical-align: -0.1em !important;
	background: none !important;
	padding: 0 !important;
}
</style>
<link rel='stylesheet' id='dwqa-style-css'  href='css/style.css?ver=1462685583' type='text/css' media='all' />
<script type='text/javascript' src='http://cdn.staticfile.org/jquery/1.11.1/jquery.min.js?ver=1462685583'></script>
<script type='text/javascript' src='http://cdn.staticfile.org/jquery-migrate/1.2.1/jquery-migrate.min.js?ver=1462685583'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var CrayonSyntaxSettings = {"version":"2.6.5","is_admin":"0","ajaxurl":"http:\/\/www.code123.cc\/wp-admin\/admin-ajax.php","prefix":"crayon-","setting":"crayon-setting","selected":"crayon-setting-selected","changed":"crayon-setting-changed","special":"crayon-setting-special","orig_value":"data-orig-value","debug":""};
var CrayonSyntaxStrings = {"copy":"\u4f7f\u7528 %s \u590d\u5236\uff0c\u4f7f\u7528 %s \u7c98\u8d34\u3002","minimize":"Click To Expand Code"};
/* ]]> */
</script>
<script type='text/javascript' src='http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js?ver=1462685583'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var mirana = {"galleryEffect":"fxSoftScale","galleryInterval":"5","swf":"http:\/\/www.code123.cc\/wp-content\/themes\/Mirana\/static\/swf"};
/* ]]> */
</script>
<script type='text/javascript' src='http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/themes/Mirana/static/js/index.js?ver=1462685583'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var wpzan_ajax_url = "http:\/\/www.code123.cc\/wp-admin\/admin-ajax.php";
/* ]]> */
</script>
<script type='text/javascript' src='http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/plugins/wp-zan/static/js/wp-zan.js?ver=1462685583'></script>
<script type='text/javascript' src='http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/plugins/wp-favorite-posts/wpfp.js?ver=1462685583'></script>
		<style type="text/css">
			.wp-zan{
				color: !important
			}
			.wp-zan:hover{
				color: !important
			}
			.wp-zan.zaned{
				color: !important
			}
		</style>
	    </head>
<body class="archive category category-python category-111">
<header id="header">
	<div class="center">
        		<a class="logo" href="http://www.code123.cc" alt="code123"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/08/logo3.png" alt="code123" /></a>
		<nav id="topnav" class="menu-menu1-container">
			<ul id="menu-menu1" class="menu">
				<li id="menu-item-1454" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-1454"><a href="index.html">首页</a></li>
				<li id="menu-item-269" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-269"><a href="trends.html">业界</a></li>
				<li id="menu-item-1600" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1600"><a href="startup.html">创业</a></li>
				<li id="menu-item-1450" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1450"><a href="interview-carrier.html">面试</a></li>
				<li id="menu-item-1451" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1451"><a href="java.html">Java</a></li>
				<li id="menu-item-1452" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-1452"><a href="python.html">Python</a></li>
			</ul>
		</nav>       
		<div class="search right">
            <form class="search-form clearfix" method="get" action="http://www.code123.cc/">
                <input class="search-submit" type="submit" />
                <input class="search-text" name="s" type="text" placeholder="Search..." />
            </form>
        </div>
	</div>
</header>
	<div id="content">
        <div class="main">
            <div class="center">
                                    <!--div><center>
                      <a href="http://my.yizhihongxing.com/aff.php?aff=494" target="_blank"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2016/07/vpn.png"></a>
                    </center></div></br-->
                    <ul id="indexcat" class="clearfix">
                        <!--li>分类目录：</li-->
                        <li><a href="http://www.code123.cc" data-hover='所有'  >所有</a></li>
                        <li><a href="http://www.code123.cc/category/android" data-hover='Android'>Android</a></li><li><a href="http://www.code123.cc/category/django" data-hover='Django'>Django</a></li><li><a href="http://www.code123.cc/category/http" data-hover='HTTP'>HTTP</a></li><li><a href="http://www.code123.cc/category/ios" data-hover='iOS'>iOS</a></li><li><a href="http://www.code123.cc/category/it-carrier" data-hover='IT职场'>IT职场</a></li><li><a href="http://www.code123.cc/category/java" data-hover='Java'>Java</a></li><li><a href="http://www.code123.cc/category/javascript" data-hover='JavaScript'>JavaScript</a></li><li><a href="http://www.code123.cc/category/java-level02" data-hover='Java进阶'>Java进阶</a></li><li><a href="http://www.code123.cc/category/leetcode" data-hover='LeetCode'>LeetCode</a></li><li><a href="http://www.code123.cc/category/linux" data-hover='Linux'>Linux</a></li><li><a href="http://www.code123.cc/category/mysql" data-hover='MySQL'>MySQL</a></li><li><a href="http://www.code123.cc/category/php" data-hover='PHP'>PHP</a></li><li><a href="http://www.code123.cc/category/python" class="current" data-hover='Python'>Python</a></li><li><a href="http://www.code123.cc/category/redis" data-hover='Redis'>Redis</a></li><li><a href="http://www.code123.cc/category/ruby" data-hover='Ruby'>Ruby</a></li><li><a href="http://www.code123.cc/category/tutor-scalar" data-hover='Scala教程'>Scala教程</a></li><li><a href="http://www.code123.cc/category/spark" data-hover='Spark'>Spark</a></li><li><a href="http://www.code123.cc/category/tcp-ip" data-hover='TCP/IP协议'>TCP/IP协议</a></li><li><a href="http://www.code123.cc/category/web-dev" data-hover='Web开发'>Web开发</a></li><li><a href="http://www.code123.cc/category/wiki" data-hover='wiki'>wiki</a></li><li><a href="http://www.code123.cc/category/trends" data-hover='业界/资讯'>业界/资讯</a></li><li><a href="http://www.code123.cc/category/people" data-hover='人物'>人物</a></li><li><a href="http://www.code123.cc/category/startup" data-hover='创业'>创业</a></li><li><a href="http://www.code123.cc/category/bigdata" data-hover='大数据'>大数据</a></li><li><a href="http://www.code123.cc/category/math-programming" data-hover='学点数学'>学点数学</a></li><li><a href="http://www.code123.cc/category/tools" data-hover='实用工具'>实用工具</a></li><li><a href="http://www.code123.cc/category/funny" data-hover='有趣'>有趣</a></li><li><a href="http://www.code123.cc/category/architecture" data-hover='架构设计'>架构设计</a></li><li><a href="http://www.code123.cc/category/games-dev" data-hover='游戏开发'>游戏开发</a></li><li><a href="http://www.code123.cc/category/interview-carrier" data-hover='程序员面试'>程序员面试</a></li><li><a href="http://www.code123.cc/category/algorithm-datastruct" data-hover='算法/数据结构'>算法/数据结构</a></li><li><a href="http://www.code123.cc/category/experience" data-hover='经验分享'>经验分享</a></li><li><a href="http://www.code123.cc/category/network-program" data-hover='网络编程'>网络编程</a></li><li><a href="http://www.code123.cc/category/computer-inside" data-hover='计算机原理'>计算机原理</a></li><li><a href="http://www.code123.cc/category/design" data-hover='设计'>设计</a></li><li><a href="http://www.code123.cc/category/design-mode" data-hover='设计模式'>设计模式</a></li>                    </ul>
                                <ul class="articles clearfix">
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/2657.html" rel="bookmark" title="Python性能优化的20条建议">
                Python性能优化的20条建议            </a>
        </h2>
        <div class="post-content">
            1、优化算法时间复杂度
算法的时间复杂度对程序的执行效率影响最大，在Python中可以通过选择合适的数据结构来优化时间复杂度，如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式，总得来说，一般有分治，分支界限，贪心，动态规划等思想。
2、减少冗余数据
如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。
3、合理使用copy与deepcopy
对于dict和list等数据结构的对象，直接赋值使用的是引用的方式。而有些情况下需要复制整个对象，这时可以使用copy包里……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-2657" class="wp-zan" onclick="wpzan(2657, 0)" href="javascript:;"><span>8</span></a></div></li>
            <li><div class="postview">673</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/2657.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post post-width-thumbnail">
                <div class="post-thumbnail">
                <div class="overlay"><a href="http://www.code123.cc/2285.html" rel="bookmark" title="Python奇技淫巧"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/themes/Mirana/static/images/view.png" alt="code123" /></a></div>
                <img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/11/python-tricks.jpg?imageView/1/w/320/h/200/q/100" alt="Python奇技淫巧" width="320" height="200" />
            </div>
            <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/2285.html" rel="bookmark" title="Python奇技淫巧">
                Python奇技淫巧            </a>
        </h2>
        <div class="post-content">
            显示有限的接口到外部
当发布python第三方package时, 并不希望代码中所有的函数或者class可以被外部import, 在__init__.py中添加__all__……        </div>
    </div>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/2258.html" rel="bookmark" title="tornado异步请求">
                tornado异步请求            </a>
        </h2>
        <div class="post-content">
            Python的web框架五花八门.大而全的框架Django,小巧的框架如web.py,flask等.以异步著称的tornado等等.
这里记录一下tornado编写异步请求程序的例子.
首先要知道,要想整个web服务是异步的,前提条件是你的各个耗时操作是异步的才行.如果你的操作是一个sleep(),由于tornado本身是单进程单线程的,那么你整个进程就被sleep()阻塞了.
一个典型的tornado异步方法编写如下:

		
		
			
class Index(RequestHandler):
    @coroutine
    def get(self):
        response = yield AsyncHTTPClient().fetch('http://google.com')
        ……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-2258" class="wp-zan" onclick="wpzan(2258, 0)" href="javascript:;"><span>2</span></a></div></li>
            <li><div class="postview">393</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/2258.html#comments"> 1</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1782.html" rel="bookmark" title="Python汉字转换成拼音">
                Python汉字转换成拼音            </a>
        </h2>
        <div class="post-content">
            最近在使用Python做项目时,需要将汉字转化成对应的拼音.在Github上找到了一个现成的程序.
Python汉字转拼音
使用实例如下:

		
		
			
from pinyin import PinYin

test = PinYin()
test.load_word()
print test.hanzi2pinyin(string='钓鱼岛是中国的')
print test.hanzi2pinyin_split(string='钓鱼岛是中国的', split="-")
			
				
					
				
					123456
				
						from pinyin import PinYin&nbsp;test = PinYin()test.load_word()print test.hanzi2pinyin(string='钓鱼岛是中国的')print test.hanzi2pinyin_spli……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1782" class="wp-zan" onclick="wpzan(1782, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">1,227</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1782.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1757.html" rel="bookmark" title="Python WSGI详解">
                Python WSGI详解            </a>
        </h2>
        <div class="post-content">
            什么是WSGI
WSGI的全称是Web Server Gateway Interface，这是一个规范，描述了web server如何与web application交互、web application如何处理请求。该规范的具体描述在PEP 3333。注意，WSGI既要实现web server，也要实现web application。
实现了WSGI的模块/库有wsgiref(python内置)、werkzeug.serving、twisted.web等，具体可见Servers which support WSGI。
当前运行在WSGI之上的web框架有Bottle、Flask、Django等，具体可见Frameworks that run on WSGI。
WSGI server所做的工作仅仅是将从客户端收到的请求传递给WSGI application，……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1757" class="wp-zan" onclick="wpzan(1757, 0)" href="javascript:;"><span>3</span></a></div></li>
            <li><div class="postview">1,893</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1757.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1434.html" rel="bookmark" title="Python爬虫框架Scrapy教程(3)—使用Redis和SQLAlchemy">
                Python爬虫框架Scrapy教程(3)—使用Redis和SQLAlchemy            </a>
        </h2>
        <div class="post-content">
            在上篇博客中，我们讲解了如何通过维护多个网站的爬取规则来抓取各个网站的数据。本文将简要地谈谈如何使用Scrapy的Item Pipline将爬取的数据去重并存储到数据库中。
Scrapy框架的高度灵活性得益于其数据管道的架构设计，开发者可以通过简单的配置就能轻松地添加新特性。我们可以通过如下的方式添加一个pipline。

		
		
			
settings.set("ITEM_PIPELINES", {'pipelines.DataBasePipeline': 300})
			
				
					
				
					1
				
						settings.set("ITEM_PIPELINES", {'pipelines.DataBasePipeline': 300})
					
			……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1434" class="wp-zan" onclick="wpzan(1434, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">2,040</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1434.html#comments"> 1</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1432.html" rel="bookmark" title="Python爬虫框架Scrapy教程(2)—动态可配置">
                Python爬虫框架Scrapy教程(2)—动态可配置            </a>
        </h2>
        <div class="post-content">
            本文紧接上篇博客，在上一篇博客中我们讲解了如何使用编程的方式运行Scrapy spider。本文将讲解如何通过维护多个网站的爬取规则来抓取各个网站的数据。
具体要实现的目标是这样的，有一张Rule表用来存储各个网站的爬取规则，Scrapy获取Rule表中的记录后，针对每一条rule自动生成一个spider，每个spider去爬它们各自网站的数据。这样我们只需要维护Rule表中的规则（可以写个Web程序来维护），而不用针对上千个网站写上千个spider文件了。
我们使用 SQLAlchemy 来映射数据库，Rule表的结构如下：

		
		
			
from sqlalchemy import C……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1432" class="wp-zan" onclick="wpzan(1432, 0)" href="javascript:;"><span>1</span></a></div></li>
            <li><div class="postview">2,250</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1432.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1431.html" rel="bookmark" title="Python爬虫框架Scrapy教程(1)—入门">
                Python爬虫框架Scrapy教程(1)—入门            </a>
        </h2>
        <div class="post-content">
            最近实验室的项目中有一个需求是这样的，需要爬取若干个（数目不小）网站发布的文章元数据（标题、时间、正文等）。问题是这些网站都很老旧和小众，当然也不可能遵守 Microdata 这类标准。这时候所有网页共用一套默认规则无法保证正确抓取到信息，而每个网页写一份spider代码也不切实际。
这时候，我迫切地希望能有一个框架可以通过只写一份spider代码和维护多个网站的爬取规则，就能自动抓取这些网站的信息，很庆幸 Scrapy 可以做到这点。鉴于国内外关于这方面资料太少，所以我将这段时间来的经验和代码分享成了本文。
为了讲清楚这件……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1431" class="wp-zan" onclick="wpzan(1431, 0)" href="javascript:;"><span>1</span></a></div></li>
            <li><div class="postview">5,278</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1431.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1424.html" rel="bookmark" title="Python性能优化的20条建议">
                Python性能优化的20条建议            </a>
        </h2>
        <div class="post-content">
            

优化算法时间复杂度
算法的时间复杂度对程序的执行效率影响最大，在Python中可以通过选择合适的数据结构来优化时间复杂度，如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式，总得来说，一般有分治，分支界限，贪心，动态规划等思想。

减少冗余数据
如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。

合理使用copy与deepcopy
对于dict和list等数据结构的对象，直接赋值使用的是引用的方式。而有些情况下需要复制整个对象，这时可以使用copy包里的cop……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1424" class="wp-zan" onclick="wpzan(1424, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">325</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1424.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1339.html" rel="bookmark" title="python项目实践九：文件共享2-GUI版本">
                python项目实践九：文件共享2-GUI版本            </a>
        </h2>
        <div class="post-content">
            有了前面的P2P基础，这一个练习就是给程序加一个可视化的界面，俗称GUI。
python里面的界面库有很多，如wxPython、wgGTK、tkinter，还有QT，按照书中的实例，我也使用wxPython来做界面。话说有了这个界面之后，我发现迅雷的网邻也不过如此（稍有夸张的成份），不过这个项目的练习之上再继续扩展的话，基本效果可以达到网邻的那种，如果有时间的话我可以继续扩展这个项目。下面就开始编写GUI。
这个里面的主要的问题应该都集中在界面上，远程共享的代码已经不需要修改了，只需要把现在的界面接上前面的代码就ok。这个wxPython库的使用，……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1339" class="wp-zan" onclick="wpzan(1339, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">1,283</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1339.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post post-width-thumbnail">
                <div class="post-thumbnail">
                <div class="overlay"><a href="http://www.code123.cc/1337.html" rel="bookmark" title="python项目实践十：DIY街机游戏"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/themes/Mirana/static/images/view.png" alt="code123" /></a></div>
                <img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/08/1440551293.54.png?imageView/1/w/320/h/200/q/100" alt="python项目实践十：DIY街机游戏" width="320" height="200" />
            </div>
            <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1337.html" rel="bookmark" title="python项目实践十：DIY街机游戏">
                python项目实践十：DIY街机游戏            </a>
        </h2>
        <div class="post-content">
            终于来到了最后一个项目，看看前面的那些练习，也算是熟悉了python的基本操作，也知道python能干哪些事情，最后一个项目相比于以前的稍微……        </div>
    </div>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1335.html" rel="bookmark" title="python项目实践八：使用XML-RPC进行远程文件共享">
                python项目实践八：使用XML-RPC进行远程文件共享            </a>
        </h2>
        <div class="post-content">
            这是个不错的练习，使用python开发P2P程序，或许通过这个我们可以自己搞出来一个P2P下载工具，类似于迅雷。说到迅雷，关于其原理不知道大家是否了解，如果你不了解，我想看完这篇文章，你一定会了解的。啥，你已经了解了？那就过来指点一番。
以前在java中也接触过类似的概念。一个是RMI（ Remote Method Invocation）的概念，另外一个就是XML-RPC的概念。
那么什么是XML-RPC呢？它和P2P有什么关系？下面谈谈我的个人理解。
XML-RPC是一个远程过程调用（remote procedurecall，RPC)的分布式计算协议，通过XML将调用函数封装，并使用HTTP……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1335" class="wp-zan" onclick="wpzan(1335, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">926</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1335.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post">
        <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1333.html" rel="bookmark" title="python项目实践七：自定义公告板">
                python项目实践七：自定义公告板            </a>
        </h2>
        <div class="post-content">
            这依然是一个cgi的项目，有了前面的一个项目作为基础，这个里面没有什么难点。不过，和书上不同的是，我这里使用的数据库是mysql，所以有兴趣的童鞋，可以参考一下。
首先建立一张mysql的数据表：

		
		
			
CREATE TABLE messages(
    id INT NOT NULL AUTO_INCREMENT,
    subject VARCHAR(100) NOT NULL,
    reply_to INT,
    text MEDIUMTEXT NOT NULL,
    PRIMARY KEY(id)
)

			
				
					
				
					12345678
				
						CREATE TABLE messages(&nbsp;&nbsp;&nbsp;&nbsp;id INT NOT NULL AUTO_INCREMENT……        </div>
    </div>
            <ul class="postmeta clearfix">
            <li><div class="postzan"><a id="wp-zan-1333" class="wp-zan" onclick="wpzan(1333, 0)" href="javascript:;"><span>0</span></a></div></li>
            <li><div class="postview">947</div></li>
            <li><div class="postcomm"><a href="http://www.code123.cc/1333.html#respond">0</a></div></li>
        </ul>
    </li>
                                            
<li class="post post-width-thumbnail">
                <div class="post-thumbnail">
                <div class="overlay"><a href="http://www.code123.cc/1331.html" rel="bookmark" title="python项目实践六：使用CGI进行远程编辑"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/themes/Mirana/static/images/view.png" alt="code123" /></a></div>
                <img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/08/1440551167.39.png?imageView/1/w/320/h/200/q/100" alt="python项目实践六：使用CGI进行远程编辑" width="320" height="200" />
            </div>
            <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1331.html" rel="bookmark" title="python项目实践六：使用CGI进行远程编辑">
                python项目实践六：使用CGI进行远程编辑            </a>
        </h2>
        <div class="post-content">
            记得一开始接触web开发的时候，看视频，视频里面的老师一般都会语重心长的说：想当年我们一开始学习编程那会儿，都是用cgi编程，复杂的很……        </div>
    </div>
    </li>
                                            
<li class="post post-width-thumbnail">
                <div class="post-thumbnail">
                <div class="overlay"><a href="http://www.code123.cc/1329.html" rel="bookmark" title="python项目实践五：虚拟茶话会"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/themes/Mirana/static/images/view.png" alt="code123" /></a></div>
                <img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2015/08/1440551096.85.png?imageView/1/w/320/h/200/q/100" alt="python项目实践五：虚拟茶话会" width="320" height="200" />
            </div>
            <div class="post-body">
        <h2 class="post-title">
            <a href="http://www.code123.cc/1329.html" rel="bookmark" title="python项目实践五：虚拟茶话会">
                python项目实践五：虚拟茶话会            </a>
        </h2>
        <div class="post-content">
            几乎在学习、使用任何一种编程语言的时候，关于socket的练习从来都不会少，尤其是会写一些局域网的通信的东西。所以书上的这个项目刚好可……        </div>
    </div>
    </li>
                                    </ul>
                <!--div><center>
                      <a href="http://my.yizhihongxing.com/aff.php?aff=494" target="_blank"><img src="http://7xlqnq.com1.z0.glb.clouddn.com/wp-content/uploads/2016/07/vpn.png"></a>
                </center></div><br-->
                <nav class="pagenav clearfix">
                    <span class='page-numbers current'>1</span><a class='page-numbers' href='http://www.code123.cc/category/python/page/2' title='第2页'>2</a><span class='right'><a class='page-numbers page-numbers-next' href='http://www.code123.cc/category/python/page/2' title='下一页'>下一页</a></span>                </nav>
            </div>
        </div>
    </div>
<footer id="footer">
	<div class="sns">
		<a href="http://weibo.com/u/5603150440" target="_blank" rel="nofollow" class="weibo"><span>新浪微博</span></a><a href="http://www.zhihu.com/people/code123" target="_blank" rel="nofollow" class="zhihu"><span>知乎</span></a><a href="http://www.code123.cc/feed" target="_blank" rel="nofollow" class="rss"><span>订阅我</span></a>	</div>
	<div class="copyright">Copyright &copy; 2015 <a href="/">Code123</a> All Rights Reserved <a href="http://www.code123.cc/contact" rel="nofollow">Contact</a></div>
    <div class="statistics-div"><script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1253876422'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s95.cnzz.com/z_stat.php%3Fid%3D1253876422%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));</script></div>
</footer>

</body>
</html>

<!-- Dynamic page generated in 1.864 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2017-03-29 08:17:39 -->

<!-- Compression = gzip -->